<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors','On');
if (!defined('BASEPATH'))
    exit('No direct script access allowed');

/**
 *  Home Class  
 *  
 * @package CMS v2.0 
 * @subpackage News  
 * @author Vui Nguyen - 09/04/2013
 * @link http://joomlavui.info
 */
class Wallet extends CI_Controller {

    /**
     * Contrust class
     *  
     * @access public 
     */
    public function __construct() {
		
        parent::__construct();
		$this->load->helper('url');		
        $this->load->library('smarty3', '', 'smarty');
        $this->load->library('captcha');
        $this->load->library('session');
        $this->load->library('email');
        // load models user,billing
        $this->load->model('kpay/db_user_model');
        $this->db_user_model		= new db_user_model();
        $this->load->model('kpay/db_billing_model');
        $this->db_billing_model		= new db_billing_model();
        //
        include APPPATH . 'libraries/pay/login_service.php';
        include APPPATH . 'libraries/pay/epay_Entries.php'; // gọi thư viện epay
        $this->login_lib 		= new login_service();
        //
        require_once APPPATH . 'libraries/pay/nganluong/vi/include/lib/nusoap.php';
    }

    public function index() {
        ///
        $msg				= "";
        $user_info			= "";        
        // end get session from epay
        $user_info = $this->session->userdata('user_info');
        if($user_info)
            $this->smarty->assign("user_info", $user_info);
        //        
        $this->smarty->assign("msg", $msg);
        $this->smarty->view('template/pages_live/partner','partner');
        $this->smarty->view('template/pages_live/wallet','content');
        $this->smarty->display('template/frontend_live/home'); 
        /*
        $this->smarty                    
                //->assign("msg"		, $msg)                    
                ->display('template/wallet/home');
         * 
         */
    }	
	/////////////////////////////START BUY CARD BY EPAY///////////////////////////////
	function wallet_epay()
	{
		//	
		$msgs	= array();
		$msg	= "";
		$code 	= -1;
		// Get user info
		$user_info = $this->session->userdata('user_info');
		if(!$user_info){
			$code 		= -1;
			$msgs[] 	= "Vui lòng đăng nhập.";
			//
			$uID 			= "";
			$username		= "";
			$customerID 	= "";
			$email 			= "";
		}else{
			$uID 			= $user_info[0]->uID;
			$username		= $user_info[0]->username;
			$customerID 	= $user_info[0]->customerID;
			$email 			= $user_info[0]->email;	
		}
		// POST VALUE
		$data['catID'] 			= $this->input->post('catID');
		$data['provider'] 		= $this->input->post('providerID');
		$data['productID']		= $this->input->post('productID');
		$data['cardprice']		= $this->input->post('cardprice'); // số tiền cần nạp
		$data['phoneReceiver']	= $this->input->post('phonereceiver'); // số điện thoại nhận
		$data['paymethod']		= $this->input->post('paymethod');
		//// CHECK VALUE
		// Check catID,ProviderID,Product ID valid.
		$tmp1					= $this->db_user_model->checkCardCategories($data['catID']);
		$tmp2					= $this->db_user_model->checkCardProvider($data['provider']);
		$tmp3					= $this->db_user_model->checkCardProduct($data['productID']);
		if(!$tmp1 or !$tmp2 or !$tmp3){
			$code 		= -1;
			$msgs[] 	= "Thông tin mua thẻ không hợp lệ.";
		}
		// Get Card Info
		$card_info				= $this->db_user_model->getCardProductsInfo($data['productID']);		
		if(!$card_info){
			$code 		= -1;
			$msgs[] 	= "Thông tin mua thẻ không hợp lệ.1.0.";
		}	
		/////////////////////////////////////	
		$log_init					= "";// khởi tạo dữ liệu			
		$log_init['ip'] 			= get_real_ip();
		//$log_init['created'] 		= mktime(0, 0, 0, date('m') , date('d'), date('Y'));
		$log_init['created'] 		= time();
		$log_init['date'] 			= date("Y-m-d H:i:s");
		$log_init['transID'] 		= TRANSID_VIDIENTU.$data['productID']."_".$log_init['created'];
		$log_init['catID'] 			= $data['catID'];
		$log_init['provider'] 		= $data['provider'];
		$log_init['productID'] 		= $data['productID'];
		$log_init['productValue'] 	= $card_info[0]->productName;
		$log_init['phoneReceiver'] 	= $data['phoneReceiver'];
		$log_init['cardprice'] 		= $data['cardprice'];
		$log_init['paymethod']		= $data['paymethod'];
		$log_init['typeUse']		= TRANSID_TYPE_USE_BANTIEN;
		// START - SAU KHI NẠP THẺ LẬP TỨC KHỞI TẠO LOG GIAO DỊCH CHO DÙ SAI HAY ĐÚNG.
		// E1.SAVE LOG KHỞI TẠO GIAO DỊCH TRƯỚC KHI ĐĂNG NHẬP VÀO EPAY
		$aParamCardLog=array(                                
				'uID' 			=> $uID,				
				'username'		=> $username,
				'email' 		=> $email,
				'customerID'            => $customerID,
				'transID' 		=> $log_init['transID'],
				'catID' 		=> $log_init['catID'],
				'providerID'	=> $log_init['provider'],
				'productID' 	=> $log_init['productID'],
				'productValue' 	=> $log_init['productValue'],
				'phoneReceiver' => $log_init['phoneReceiver'],
				'cardprice' 	=> $log_init['cardprice'],
				'typeUse' 		=> $log_init['typeUse'],
				"date"			=> $log_init['date'],
				'created' 		=> $log_init['created'],
				'statusDesc' 	=> "Khởi tạo",
				'status' 		=> "-2",
				'ip' 			=> $log_init['ip']
			);		
		//
                try{
                    $log1 					= $this->db_billing_model->ano_logbilling_init($aParamCardLog); //ok
                } catch (Exception $e) {
                        //echo 'Caught exception: ',  $e->getMessage(), "\n";exit;
                        $code 		= -1;
                        $msgs[] 	= "Caught exception: .".$e->getMessage();
                }    
		if(!count($msgs)) {	
			///
			//// GỌI THƯ VIỆN EPAY///////////////
			require_once(APPPATH.'libraries/pay/epay/ItopupClient.php');
			$itopupClient 			= new ItopupClient();
			// 1. Ðăng nhập hệ thống
			$result 				= $itopupClient->signIn();					
		// Kết quả sau khi đăng nhập.
			if($itopupClient->errorCode==0)
			{
				try{
					$errorCode			= $itopupClient->errorCode;// Ma 0: thanh cong
					$errorMessage		= $itopupClient->errorMessage;
					$errortoken			= $itopupClient->token;// Ma cua phien lam viec
					$requestID 			= $itopupClient->generateRandomRequestID();					
					// E2.START SAVE LOG KHỞI TẠO GIAO DỊCH SAU KHI LOGIN VÀO EPAY SYSTEM
					$aParamCardLog=array(
							'requestID' 	=> $requestID,
							'transID' 		=> $log_init['transID'],// key để biết được record sẽ updated
							'updated' 		=> date("Y-m-d H:i:s"),
							// Logined Epay info
							'errorCode' 	=> $errorCode,
							'errorMessage' 	=> $errorMessage,
							//
							'statusDesc' 	=> "Chưa hoàn thành",
							'status' 		=> "-1"
						);
					// update customer ID for user table
					$aUpdate		= array("requestID","updated","errorCode","errorMessage","statusDesc","status");
					$log2 			= $this->db_billing_model->insert_onduplicate_logbilling_update($aParamCardLog,$aUpdate); //ok
					// E2.END SAVE LOG KHỞI TẠO GIAO DỊCH SAU KHI LOGIN VÀO EPAY SYSTEM
					//
					//$result				= $this->downloadSoftpin($itopupClient,$data['productID'],$data['quantity'],$requestID);
					/////////////// GỌI HÀM BẮN TIỀN/////////////////////// 
					$result					= $this->directTopup($itopupClient,$data['phoneReceiver'],$data['cardprice'],$requestID);
					//echo $result["epayTransID"];
					//print_r($result);exit;
					// 1. Gửi kết quả về từ Epay
					// Epay trans ID info success
					if($result['epayTransID']>0 && $result['epayStatus']>0){ // có giao dịch và giao dịch hợp lệ																		
						
						// notice info							
						$purchase_res['epayTransID']		= $result["epayTransID"];
						$purchase_res['merchantID']			= $result["merchantID"];
						$purchase_res['merchantBalance']	= $result["merchantBalance"];
						$purchase_res['epayStatus']			= $result["epayStatus"];
						$purchase_res['errorCode']			= $result["errorCode"];
						$purchase_res['errorMessage']		= $result["errorMessage"];
						$purchase_res['requestID']			= $requestID;
						if($card_info)
						{
							$purchase_res['productValue']		= $card_info[0]->productName;//$product['productValue'];
							$purchase_res['providerID']			= $card_info[0]->providerID;//$product['productID'];
							//$purchase_res['providerName']		= $card_info[0]->providerName;//$result['productID'];
						}
						// user info
						if($user_info)
						{
							$purchase_res['customerID']			= $user_info[0]->customerID;
							$purchase_res['email']				= $user_info[0]->email;
						}
						$purchase_res['merchantBalance']		= $result["merchantBalance"];								
						// E3.START SAVE LOG SUCCESS
						$aParamCardLog=array(
								'transID' 		=> $log_init['transID'],// key để biết được record sẽ updated
								'epayStatus' 	=> $purchase_res['epayStatus'],
								'partnerTransID'=> $purchase_res['epayTransID'],
								'transIdRes'	=> $purchase_res['epayTransID'],
								'errorCode' 	=> $purchase_res['errorCode'],
								'errorMessage' 	=> $purchase_res['errorMessage'],
								//
								'merchantID' 	=> $purchase_res['merchantID'],
								'merchantBalance' => $purchase_res['merchantBalance'],
								//card info								
								'amount'		=> $log_init['cardprice'], // nếu thành công mới save số tiền vào									
								//'cardType'		=> $purchase_res['providerName'],
								//
								'updated' 		=> date("Y-m-d H:i:s"),
								'statusDesc' 	=> "Thành công",
								'status' 		=> "1"
							);
						// update customer ID for user table
						$aUpdate	= array("epayStatus","partnerTransID","transIdRes","merchantID","merchantBalance","errorCode","errorMessage","amount","updated","statusDesc","status");
						$log3 			= $this->db_billing_model->insert_onduplicate_logbilling_update($aParamCardLog,$aUpdate); //ok
						// E3.END SAVE LOG SUCCESS					
						$code 		= 1;
						$msgs[] 	= "Giao dịch thành công.";	
							
					}else{ // Epay trans ID info failed
						$purchase_res['epayStatus']				= $result['epayStatus']; // lấy mã thẻ thất bại. 
						$purchase_res['epayTransID']			= $result['epayTransID'];
						$purchase_res['merchantID']				= $result["merchantID"];
						$purchase_res['merchantBalance']		= $result["merchantBalance"];
						$purchase_res['errorCode']				= $result['errorCode'];
						$purchase_res['errorMessage']			= $result['errorMessage'];
						// E3.START SAVE LOG FAILED
						$aParamCardLog=array(
								'transID' 		=> $log_init['transID'],// key để biết được record sẽ updated
								'epayStatus' 	=> $purchase_res['epayStatus'],
								'partnerTransID'=> $purchase_res['epayTransID'],
								'transIdRes' 	=> $purchase_res['epayTransID'],
								//
								'merchantID' 	=> $purchase_res['merchantID'],
								'merchantBalance' => $purchase_res['merchantBalance'],
								//
								'errorCode' 	=> $purchase_res['errorCode'],
								'errorMessage' 	=> $purchase_res['errorMessage'],
								'updated' 		=> date("Y-m-d H:i:s"),
								'statusDesc' 	=> "Thất bại",
								'status' 		=> "0"
							);
						// update customer ID for user table
						$aUpdate	= array("epayStatus","partnerTransID","transIdRes","merchantID","merchantBalance","errorCode","errorMessage","updated","statusDesc","status");
						$log3 			= $this->db_billing_model->insert_onduplicate_logbilling_update($aParamCardLog,$aUpdate); //ok
						// E3.END SAVE LOG FAILED
						$code 		= -1;
						$msgs[] 	= "Không lấy được mã thẻ.E002";	
					} // End result
					// Nên trả về json, sau đó truyền qua ajax rồi xử lý tiếp
					// product
					echo json_encode($purchase_res);exit;
					//print_r($purchase_res);exit;
					// 2. Gửi email cho user
				} catch (Exception $e) {
					//echo 'Caught exception: ',  $e->getMessage(), "\n";exit;
					$code 		= -1;
					$msgs[] 	= "Caught exception: .".$e->getMessage();
				}				
			}else{
				// không kết nối dc với hệ thống epay.
				//echo "Hệ thống đang bận hoặc bảo trì, vui lòng quay lại sau.E001.";exit;
				$code 		= -1;
				$msgs[] 	= "Hệ thống đang bận hoặc bảo trì, vui lòng quay lại sau.E001.";
			}// end kết quả sau khi đăng nhập			
		}else{
			$msgs[] 	= "Vui lòng quay lại sau ít phút.";//exit;			
		}// end check count msg	
		foreach ($msgs as $m){
			$msg.="$m<br/>";			
		}
		$msg	= json_encode(array("code"=>$code,"msg"=>$msg));
		echo $msg;exit;
	}	
	/////////////////////////////START TOPUP VI///////////////////////////////
	////////////////////// CAP NHAT SO TIEN VAO VI //////////////////////
        function updateAmountToVi($customerID,$Email,$amount){            
            //
            if($customerID){                
                $aParamAmount=array(                                
                                'coin'              => "coin+$amount"
                );                
                $log2           = $this->db_user_model->insert_onduplicate_update_amount_User($aParamAmount,$customerID); //ok
            }else{
                return;
            }    
        }
	/////////////////////////////END TOPUP VI///////////////////////////////
        /**********************************START SMARTLINK*******************************************/
	////////////////////// THANH TOÁN MUA THẺ BỞI SMARTLINK //////////////////////
	function wallet_smartlink($amount_vi=null){
            //
            include APPPATH . 'libraries/pay/smartlink/config_sm.php'; // thư viện smartlink
            //define lai url callback
            $vpc_ReturnURL   =   base_url()."wallet/wallet_smartlink_callback";
            //Địa chỉ URL của Merchant tiếp nhận kết quả thanh toán trả về từ Cổng thanh toán.
            $vpc_BackURL     =   base_url()."wallet/wallet_smartlink_cancel";
            //Địa chỉ URL của Merchant tiếp nhận yêu cầu tiếp tục mua hàng khi khách hàng thực hiện chức năng huỷ từ Cổng thanh toán.
            //	
            $_SESSION['cardReceived'] = - 100;// start session card.
            $msgs	= array();
            $msg	= "";
            $code 	= -1;		
            $time	= TIME;// tranh viec bi trung ma gd
            $timestamp  = randString($time);
            // POST VALUE
            //$data['amount_vi'] 			= $this->input->post('amount_vi');
            if(!$amount_vi || $amount_vi < 1000){
                    $code 		= -1;
                    $msgs[] 	= "Số tiền nạp không hợp lệ.1.0.";
            }
            // Get user info
            $user_info = $this->session->userdata('user_info');
            if(!$user_info){
                    $code 		= -1;
                    $msgs[] 	= "Vui lòng đăng nhập.";
                    //
                    $uID 			= "";
                    $username		= "";
                    $customerID 	= "";
                    $email 			= "";
            }else{
                    $uID 		= $user_info[0]->uID;
                    $username		= $user_info[0]->username;
                    $customerID         = $user_info[0]->customerID;
                    $email 		= $user_info[0]->email;	
            }
            ////
            if(!count($msgs)) {						
                // post value and redirect url (FIXED CỐ ĐỊNH, KHÔNG ĐƯỢC THÊM VÀO BẤT CỨ GÌ)
                $data['Title'] 		= "Nạp tiền vào Ví điện tử";
                //$data['xxx'] 		= "PHP Merchant";
                $data['vpc_AccessCode'] = vpc_AccessCode;
                $data['vpc_Amount']	= $amount_vi;
                $data['vpc_BackURL']	= $vpc_BackURL;
                $data['vpc_Command']	= vpc_Command;
                $data['vpc_Currency']	= vpc_Currency;
                $data['vpc_Locale']	= vpc_Locale;
                $data['vpc_MerchTxnRef']= TRANSID_PAY_BY_SMARTLINK."vi"."_".$timestamp;//vpc_MerchTxnRef;
                $data['vpc_Merchant']	= vpc_Merchant;
                $data['vpc_OrderInfo']	= vpc_OrderInfo;
                $data['vpc_ReturnURL']	= $vpc_ReturnURL;
                $data['vpc_Version']	= vpc_Version;
                // SAVE LOG KHỞI TẠO
                /////////////////////////////////////	
                $log_init			= "";// khởi tạo dữ liệu			
                $log_init['ip'] 		= get_real_ip();
                $log_init['created'] 		= $time;
                $log_init['date'] 		= date("Y-m-d H:i:s");
                $log_init['transID'] 		= $data['vpc_MerchTxnRef'];		
                $log_init['cardprice'] 		= $amount_vi;
                $log_init['paymethod']		= "";
                $log_init['typeUse']		= TRANSID_TYPE_USE_VI;//napj vao vi dien tu
                // E1.SAVE LOG KHỞI TẠO GIAO DỊCH TRƯỚC KHI ĐĂNG NHẬP VÀO EPAY
                $aParamCardLog=array(                                
                                'uID' 			=> $uID,				
                                'username'		=> $username,
                                'email' 		=> $email,
                                'customerID'            => $customerID,
                                'transID' 		=> $log_init['transID'],
                                // payment info
                                'merchantTransactionRef' 	=> $data['vpc_MerchTxnRef'],
                                'transactionOrderInfo'		=> $data['vpc_OrderInfo'],
                                ///				
                                'cardprice'             => $log_init['cardprice'],
                                'paySource'             => "smartlink",
                                'typeUse' 		=> $log_init['typeUse'],
                                "date"			=> $log_init['date'],
                                'created' 		=> $log_init['created'],
                                'statusDesc'            => "Khởi tạo",
                                'status' 		=> "-2",
                                'ip' 			=> $log_init['ip']
                        );		
                // 
                try{
                    $log1 					= $this->db_billing_model->ano_logbilling_init($aParamCardLog); //ok
                } catch (Exception $e) {
                        //echo 'Caught exception: ',  $e->getMessage(), "\n";exit;
                        $code 		= -1;
                        $msgs[] 	= "Caught exception: .".$e->getMessage();
                } 
                if(!$log1){ // insert thanhf cong tra ve 1
                    echo "L";exit;
                }                                   
                // Define Constants
                // ----------------
                // This is secret for encoding the MD5 hash
                // This secret will vary from merchant to merchant
                // To not create a secure hash, let SECURE_SECRET be an empty string - ""
                // $SECURE_SECRET = "secure-hash-secret";
                $SECURE_SECRET = Secure_Secret;

                // add the start of the vpcURL querystring parameters
                $vpcURL = virtualPaymentClientURL . "?";

                // Remove the Virtual Payment Client URL from the parameter hash as we 
                // do not want to send these fields to the Virtual Payment Client.
                unset($_POST["virtualPaymentClientURL"]); 
                unset($_POST["SubButL"]);

                // Create the request to the Virtual Payment Client which is a URL encoded GET
                // request. Since we are looping through all the data we may as well sort it in
                // case we want to create a secure hash and add it to the VPC data if the
                // merchant secret has been provided.
                $md5HashData = $SECURE_SECRET;
                //ksort ($_POST);
                ksort ($data);

                // set a parameter to show the first pair in the URL
                $appendAmp = 0;
                //print_r ($_POST);exit;
                //foreach($_POST as $key => $value) {
                foreach($data as $key => $value) {			
                        // create the md5 input and URL leaving out any fields that have no value
                        if (strlen($value) > 0) {

                                // this ensures the first paramter of the URL is preceded by the '?' char
                                if ($appendAmp == 0) {
                                        $vpcURL .= urlencode($key) . '=' . urlencode($value);
                                        $appendAmp = 1;
                                } else {
                                        $vpcURL .= '&' . urlencode($key) . "=" . urlencode($value);
                                }
                                $md5HashData .= $value;
                        }
                }

                // Create the secure hash and append it to the Virtual Payment Client Data if
                // the merchant secret has been provided.
                if (strlen($SECURE_SECRET) > 0) {
                        $vpcURL .= "&vpc_SecureHash=" . strtoupper(md5($md5HashData));
                }

                // FINISH TRANSACTION - Redirect the customers using the Digital Order
                // ===================================================================
                //header("Location: ".$vpcURL);
                redirect($vpcURL);
            }else{
                // không kết nối dc với hệ thống epay.
                //echo "Hệ thống đang bận hoặc bảo trì, vui lòng quay lại sau.E001.";exit;
                $code 		= -1;
                $msgs[] 	= "LHệ thống đang bận hoặc bảo trì, vui lòng quay lại sau.";
                foreach ($msgs as $m){
                        $msg.="$m<br/>";			
                }
                $msg	= json_encode(array("code"=>$code,"msg"=>$msg));
                // end get session from epay
                $user_info = $this->session->userdata('user_info');
                if($user_info)
                $this->smarty->assign("user_info", $user_info);
                //
                $this->smarty->assign('msg'		, json_decode($msg));
                $this->smarty->assign('card_info'		, $card_info);
                $this->smarty->view('template/pages_live/partner','partner');
                $this->smarty->view('template/pages_live/buycard_info','content');
                $this->smarty->display('template/frontend_live/home'); 
                /*
                $this->smarty
                            ->display('template/topup/home_vi');
                 * 
                 */
                //echo $msg;exit;
            }// end kết quả sau khi đăng nhập		   
	}
	////// THANH TOÁN MUA THẺ BỞI SMARTLINK
	function wallet_smartlink_callback(){
		// code here		
		$msg				= "";
		$msgs				= array();
		$card_info			= "";
                //
                $user_info = $this->session->userdata('user_info');
		// Nếu chưa login thì redirect qua form nhập thông tin.		
		if(!$user_info){
			$code 		= -1;
			$msgs[] 	= "Vui lòng đăng nhập.";
			//
			$uID            = "";
			$username	= "";
			$customerID 	= "";
			$email 		= "";
			//redirect("account/login"); // qua form nhập thông tin user
		}else{ // else thì check số tiền trong ví.
			$uID 			= $user_info[0]->uID;
			$username		= $user_info[0]->username;
			$customerID             = $user_info[0]->customerID;
			$email 			= $user_info[0]->email;				
		}
		//
		//print_r($_GET);exit;
		// code here (sau khi thanh toán thành công, tiến hành gọi hàm lấy mã thẻ cho user)
		include APPPATH . 'libraries/pay/smartlink/config_sm.php';
		//$pay_store_info_init= $data;
		$SECURE_SECRET = Secure_Secret;
		// If there has been a merchant secret set then sort and loop through all the
		// do not want to include this field in the hash calculation
		$vpc_Txn_Secure_Hash = $_GET["vpc_SecureHash"];
		unset($_GET["vpc_SecureHash"]); 
		// set a flag to indicate if hash has been validated
		$errorExists = false;
		if (strlen($SECURE_SECRET) > 0 && $_GET["vpc_ResponseCode"] != "No Value Returned") {
		
			$md5HashData = $SECURE_SECRET;
		
			// sort all the incoming vpc response fields and leave out any with no value
			foreach($_GET as $key => $value) {
				if ($key != "vpc_SecureHash" or strlen($value) > 0) {
					$md5HashData .= $value;
				}
			}
			// Validate the Secure Hash (remember MD5 hashes are not case sensitive)
			// This is just one way of displaying the result of checking the hash.
			// In production, you would work out your own way of presenting the result.
			// The hash check is all about detecting if the data has changed in transit.
			if (strtoupper($vpc_Txn_Secure_Hash) == strtoupper(md5($md5HashData))) {
				// Secure Hash validation succeeded, add a data field to be displayed
				// later.
				//$hashValidated = "<FONT color='#00AA00'><strong>CORRECT</strong></FONT>";
				$hashValidated	= 1; // valid hash
			}else {
				// Secure Hash validation failed, add a data field to be displayed
				// later.
				//$hashValidated = "<FONT color='#FF0066'><strong>INVALID HASH</strong></FONT>";
				$hashValidated	= -100; // invalid hash // định hack hệ thống hả, hihi
				$errorExists 	= true;
				$code 			= -1;
				$msgs[] 		= "Dữ liệu không hợp lệ.H001.";
			}
		} else {
			// Secure Hash was not validated, add a data field to be displayed later.
			//$hashValidated = "<FONT color='orange'><strong>Not Calculated - No 'SECURE_SECRET' present.</strong></FONT>";
				$code 			= -1;
				$msgs[] 		= "Lỗi hệ thống.H002."; //Not Calculated - No 'SECURE_SECRET' present
		}
		
		// Define Variables
		// ----------------
		// Extract the available receipt fields from the VPC Response
		// If not present then let the value be equal to 'No Value Returned'
		
		// Standard Receipt Data
		$version         = $this->null2unknown(($_GET["vpc_Version"]));
		$locale          = $this->null2unknown(($_GET["vpc_Locale"]));
		$command         = $this->null2unknown(($_GET["vpc_Command"]));
		$merchantID      = $this->null2unknown(($_GET["vpc_Merchant"]));
		$merchTxnRef     = $this->null2unknown(($_GET["vpc_MerchTxnRef"]));		
		$amount          = $this->null2unknown(($_GET["vpc_Amount"]));
		$currencyCode    = $this->null2unknown(($_GET["vpc_CurrencyCode"]));
		$orderInfo       = $this->null2unknown(($_GET["vpc_OrderInfo"]));
		$txnResponseCode = $this->null2unknown(($_GET["vpc_ResponseCode"]));
		//txnResponseCode: Có giá trị bằng "0" (zero) khi giao dịch thành công và được cấp phép thanh toán bởi
		// Ngân hàng phát hành. Các giá trị khác đều có nghĩa là không thành công
		//
		$errorMessage	 = $this->getResponseDescription($txnResponseCode);
		$transactionNo   = $this->null2unknown(isset($_GET["vpc_TransactionNo"]));
		//exit;
		//$additionData    = $this->null2unknown($_GET["vpc_AdditionData"]);
		$batchNo         = $this->null2unknown(isset($_GET["vpc_BatchNo"]));
		//$acqResponseCode = $this->null2unknown($_GET["vpc_AcqResponseCode"]);
		//$message         = $this->null2unknown($_GET["vpc_Message"]);
		//echo $hashValidated;exit;
		if(!count($msgs)) {	
                    // check thông tin mã hash trả về và responsecode và 1 số điều kiện khác nếu có. &&&&
                    if($hashValidated==1 && $txnResponseCode==0){			
				try{
					// E3.START SAVE LOG SUCCESS
					$aParamCardLog=array(
							'transID' 		=> $merchTxnRef,// key để biết được record sẽ updated
							'partnerTransID' => $merchTxnRef,// key để biết được record sẽ updated
							'transIdRes' 	=> $merchTxnRef,// key để biết được record sẽ updated
							//
							// payment info
							'transactionOrderInfo'	=> $orderInfo,
							'transactionNumber'		=> $transactionNo,
							'batchNumber'			=> $batchNo,
							//
							'amount'		=> $amount, // nếu thành công mới save số tiền vào									
							// mess
							'errorCode'		=> $txnResponseCode,
							'errorMessage'	=> $errorMessage,
							'epayStatus'	=> 1,
							//
							'updated' 		=> date("Y-m-d H:i:s"),
							'statusDesc' 	=> "Thành công",
							'status' 		=> "1"
						);
					// update customer ID for user table
					$aUpdate	= array("partnerTransID","transIdRes","transactionOrderInfo","transactionNumber","batchNumber","amount","errorCode","errorMessage","epayStatus","updated","statusDesc","status");		
					$log3 			= $this->db_billing_model->insert_onduplicate_logbilling_update($aParamCardLog,$aUpdate); //ok
					//
					$code 		= 1;
					$msgs[] 	= "Giao dịch thành công.";
					//check chỉ get 1 lần duy nhất ứng với mỗi giao dịch.					
                                        // check
                                        $tmp_status = $this->db_billing_model->getTransIDStatus($merchTxnRef);// =1ok;else:false
                                        if(!$tmp_status){ // if success trans will don't get card code.
                                            if($_SESSION['cardReceived']=='-100'){
                                                // CHUYỂN QUA BƯỚC UPDATE TIEN VAO VI 
                                                $card_info      = $this->updateAmountToVi($customerID, $email, $amount);
                                                $_SESSION['card_info'] = $card_info;
                                            }
                                        }
					$_SESSION['cardReceived']= 100; // ko else
					
				} catch (Exception $e) {
					//echo 'Caught exception: ',  $e->getMessage(), "\n";exit;
					$code 		= -1;
					$msgs[] 	= "Caught exception: .".$e->getMessage();
				}
			}elseif($hashValidated==1 && $txnResponseCode!=0){
                        try{ 
                            // E3.START SAVE LOG SUCCESS
                            $aParamCardLog=array(
                                    'transID' 		=> $merchTxnRef,// key để biết được record sẽ updated
                                    'partnerTransID' => $merchTxnRef,// key để biết được record sẽ updated
                                    'transIdRes' 	=> $merchTxnRef,// key để biết được record sẽ updated
                                    //
                                    // payment info
                                    'transactionOrderInfo'	=> $orderInfo,
                                    'transactionNumber'		=> $transactionNo,
                                    'batchNumber'			=> $batchNo,
                                    //
                                    'amount'		=> $amount, // nếu thành công mới save số tiền vào									
                                    // mess
                                    'errorCode'		=> $txnResponseCode,
                                    'errorMessage'	=> $errorMessage,
                                    'epayStatus'	=> $txnResponseCode,
                                    //
                                    'updated' 		=> date("Y-m-d H:i:s"),
                                    'statusDesc' 	=> "Thất bại",
                                    'status' 		=> "0"
                            );
                            //print_r($aParamCardLog);exit;
                            // update customer ID for user table
                            $aUpdate	= array("transID","partnerTransID","transIdRes","transactionOrderInfo","transactionNumber","batchNumber","amount","errorCode","errorMessage","epayStatus","updated","statusDesc","status");		
                            $log3 			= $this->db_billing_model->insert_onduplicate_logbilling_update($aParamCardLog,$aUpdate); //ok                            
                            
                            //
                            $code 		= -1;
                            $msgs[] 	= "Giao dịch thất bại. Vui lòng thử lại hoặc liên hệ bộ phận hỗ trợ để biết thêm chi tiết.";
                        } catch (Exception $e) {
                            //echo 'Caught exception: ',  $e->getMessage(), "\n";exit;
                            $code 		= -1;
                            $msgs[] 	= "Caught exception: .".$e->getMessage();
                        }		
                    }// end check respon from bank			
		}else{			
                    $code 		= -1;
                    $msgs[]             = "Vui lòng liên hệ bộ phận hỗ trợ để biết thêm chi tiết.";
		} // end count mess	
		///	
		foreach ($msgs as $m){
                    $msg.="$m<br/>";		
		}
		$msg	= json_encode(array("code"=>$code,"msg"=>$msg));	
		//print_r($msg);
		// *******************
		// END OF MAIN PROGRAM
		// *******************			
		$user_info = $this->session->userdata('user_info');
		if($user_info)
                    $this->smarty->assign("user_info", $user_info);
                if(isset($_SESSION['card_info']))
                    $card_info  = $_SESSION['card_info'];                
		//
                $this->smarty->assign('msg'		, json_decode($msg));
                $this->smarty->assign('card_info'		, $card_info);
                $this->smarty->view('template/pages_live/partner','partner');
                $this->smarty->view('template/pages_live/wallet','content');
                $this->smarty->display('template/frontend_live/home'); 
                /*
		$this->smarty
                        ->assign("card_info" , $card_info)
                        ->assign("msg"		, json_decode($msg))
                        ->display('template/wallet/home');
                 * 
                 */
	}
	////// THANH TOÁN MUA THẺ BỞI SMARTLINK
	function wallet_smartlink_cancel(){//echo "cancel";exit;
		//
		//include APPPATH . 'libraries/pay/smartlink/config_sm.php'; // thư viện smartlink
		// code here
		//include APPPATH . 'libraries/pay/smartlink/config_sm.php';
		//$pay_store_info_init= $data;
		//print_r($pay_store_info_init);
		redirect("");
	}
	// End Processing

	// This method uses the QSI Response code retrieved from the Digital
	// Receipt and returns an appropriate description for the QSI Response Code
	//
	// @param $responseCode String containing the QSI Response Code
	//
	// @return String containing the appropriate description
	//
	function getResponseDescription($responseCode) {	
		switch ($responseCode) {
			case "0" : $result = "Giao dịch thành công"; break;
			case "1" : $result = "Ngân hàng từ chối thanh toán: thẻ/tài khoản bị khoá"; break;
			case "2" : $result = "Lỗi số 2"; break;
			case "3" : $result = "Thẻ hết hạn"; break;
			case "4" : $result = "Quá số lần giao dịch cho phép. (Sai OTP, quá hạn mức trong ngày)"; break;
			case "5" : $result = "Không có trả lời từ ngân hàng"; break;
			case "6" : $result = "Lỗi giao tiếp với ngân hàng"; break;
			case "7" : $result = "Tài khoản không đủ tiền"; break;
			case "8" : $result = "Lỗi truyền dữ liệu"; break;
			case "9" : $result = "Kiểu giao dịch không được hỗ trợ"; break;
			case "10" : $result = "Lỗi Khác"; break;
			case "11" : $result = "Giao dịch chưa được xác thực OTP"; break;
			case "12" : $result = "Giao dịch không thành công, thẻ vượt quá hạn mức trong ngày"; break;
			case "13" : $result = "Thẻ chưa đăng ký dịch vụ giao dịch qua internet"; break;
			case "14" : $result = "Sai OTP"; break;
			case "15" : $result = "Sai mật khẩu"; break;
			case "16" : $result = "Sai tên chủ thẻ"; break;
			case "17" : $result = "Sai số thẻ"; break;
			case "18" : $result = "Sai ngày hiệu lực thẻ (sai ngày phát hành)"; break;
			case "19" : $result = "Sai ngày hiệu lực thẻ (sai ngày hết hạn)"; break;
			case "20" : $result = "OTP Timeout"; break;
			case "22" : $result = "Chưa xác thực thông tin thẻ"; break;
			case "23" : $result = "Không đủ điều kiện thanh toán (thẻ/tài khoản không hợp lệ hoặc TK không đủ
số dư)."; break;
			case "24" : $result = "Giao dịch không thành công, số tiền giao dịch vượt quá hạn mức 1 lần thanh
toán."; break;
			case "25" : $result = "Giao dịch không thành công, số tiền giao dịch vượt hạn mức thanh toán."; break;
			case "26" : $result = "Giao dịch chờ xác nhận từ Ngân hàng."; break;
			default  : $result = "Không xác định lỗi"; 
		}
		return $result;
	}
	//  -----------------------------------------------------------------------------	
	// If input is null, returns string "No Value Returned", else returns input
	function null2unknown($data) {
		if ($data == "") {
			return "No Value Returned";
		} else {
			return $data;
		}
	} 		
	//  ----------------------------------------------------------------------------
	/********************************END SMARTLINK*********************************************/
        /**********************************START BẢO KIM*******************************************/
	////////////////////// THANH TOÁN QUA VÍ BẢO KIM //////////////////////
	function wallet_baokim($amount_vi=null){
            // include thư viện
            include APPPATH . 'libraries/pay/baokim/vi/baokim/BaoKimPayment.php'; // thư viện smartlink
            include APPPATH . 'libraries/pay/baokim/vi/config_bk.php'; // file config            
            //define lai url callback
            $url_success        =   base_url()."wallet/wallet_baokim_callback";           
            $url_cancel         =   base_url()."wallet/wallet_baokim_cancel";
            $url_detail         =   base_url()."wallet/wallet_baokim_detail";
            //
            $_SESSION['cardReceived']='-100';// start baor kim session card
            $msgs	= array();
            $msg	= "";
            $code 	= -1;		
            $time	= time();
            // Get user info
            $user_info = $this->session->userdata('user_info');
            if(!$amount_vi || $amount_vi < 10000){
                $code 		= -1;
                $msgs[]         = "Số tiền nạp không hợp lệ.";
            }
            if(!$user_info){
                $code 		= -1;
                $msgs[]         = "Vui lòng đăng nhập.";
                //
                $uID 		= "";
                $username       = "";
                $customerID 	= "";
                $email 		= "";
            }else{
                $uID 		= $user_info[0]->uID;
                $username	= $user_info[0]->username;
                $customerID 	= $user_info[0]->customerID;
                $email 		= $user_info[0]->email;	
            }
            ////
            if(!count($msgs))
            {    
                /// Thông tin khởi tạo cho Bảo Kim		
                $total_amount 	= $amount_vi;//$_POST['total_amount'];
                $order_id 	= TRANSID_PAY_BY_BAOKIM."vi"."_".date('dmY_His');
                $business 	= BUSINESS;//"trungbq@dos.com.vn";//"vnv1004@gmail.com";
                $description 	= "Thanh toán đơn hàng ".$order_id;
                $order_description  = $description;
                $shipping_fee 	= SHIPPING_FREE; //Nếu tính thêm phí vận chuyển thì thiết lập tại đây
                $tax_fee 	= TAX_FREE; //Nếu tính thêm phí thuế thì thiết lập tại đây
                $url_success 	= $url_success;
                //URL callback khi thanh toán thành công để update thông tin 
                $url_cancel 	= $url_cancel; 
                //Url khi click link "Tôi không muốn thanh toán đơn hàng này" trên cổng thanh toán Bảo Kim
                $url_detail 	= $url_detail;
                //Url chứa thông tin chi tiết đơn hàng		
                $baokim 	= new BaoKimPayment();
                $request_url 	= $baokim->createRequestUrl($order_id, $business, $total_amount, $shipping_fee, $tax_fee, $order_description, $url_success, $url_cancel, $url_detail);
                // SAVE LOG KHỞI TẠO
                /////////////////////////////////////	
                $log_init			= "";// khởi tạo dữ liệu			
                $log_init['ip'] 		= get_real_ip();
                $log_init['created'] 		= $time;
                $log_init['date'] 		= date("Y-m-d H:i:s");
                $log_init['transID'] 		= $order_id; // chính là order ID            
                $log_init['cardprice']		= $amount_vi;
                $log_init['typeUse']		= TRANSID_TYPE_USE_VI;            
                // E1.SAVE LOG KHỞI TẠO GIAO DỊCH TRƯỚC KHI ĐĂNG NHẬP VÀO EPAY
                $aParamCardLog=array(                                
                                'uID' 		=> $uID,				
                                'username'	=> $username,
                                'email' 	=> $email,
                                'customerID' 	=> $customerID,
                                'transID' 	=> $log_init['transID'],
                                // payment info
                                'transactionOrderInfo'=> $order_description,
                                ///                            
                                'cardprice' 	=> $log_init['cardprice'],
                                'paySource' 	=> BAOKIM,
                                'typeUse' 	=> $log_init['typeUse'],
                                "date"		=> $log_init['date'],
                                'created' 	=> $log_init['created'],
                                'statusDesc' 	=> "Khởi tạo",
                                'status' 	=> "-2",
                                'ip' 		=> $log_init['ip']
                        );		
                // 
                $log1 				= @$this->db_billing_model->ano_logbilling_init($aParamCardLog); //ok
                //echo $request_url;exit;
                echo "<meta http-equiv='refresh' content='0;url=$request_url' />";exit;
                //redirect($request_url);
                //header('Location: '.$request_url);exit;
            }else{
                foreach ($msgs as $m){
                    $msg.="$m<br/>";			
		}
		$msg	= json_encode(array("code"=>$code,"msg"=>$msg));                
                //
                $user_info = $this->session->userdata('user_info');
		if($user_info)
                    $this->smarty->assign("user_info", $user_info);                
		$this->smarty                                                        
                            ->assign("msg", json_decode($msg))
                            ->display('template/wallet/home_info');                
            }
	}
	//
	function wallet_baokim_callback(){
		// include thư viện
		include APPPATH . 'libraries/pay/baokim/vi/baokim/BaoKimPayment.php'; // thư viện smartlink
		include APPPATH . 'libraries/pay/baokim/vi/config_bk.php'; // file config
		//	
		$msgs	= array();
		$msg	= "";
		$code 	= -1;		
		$time	= time();
		$card_info	= "";
		//Baokim Payment Notification (BPN) Sample
		//Lay thong tin tu Baokim POST sang
		$req = '';
		foreach ( $_POST as $key => $value ) {
			$value = urlencode ( stripslashes ( $value ) );
			$req .= "&$key=$value";
		}		
		//thuc hien  ghi log cac tin nhan BPN
		/*$myFile = "logs/bpn.log";
		$fh = fopen($myFile, 'a') or die("can't open file");
		$text = "\n\n".$_SERVER['REMOTE_ADDR']."-".date("j,m,Y, H:i:s a").$req."\n\n";
		fwrite($fh, $text);*/
		
		$ch = curl_init();		
		//Dia chi chay BPN test
		//curl_setopt($ch, CURLOPT_URL,'http://sandbox.baokim.vn/bpn/verify');		
		//Dia chi chay BPN that
		curl_setopt($ch, CURLOPT_URL,'https://www.baokim.vn/bpn/verify');
		curl_setopt($ch, CURLOPT_VERBOSE, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_POST, 1);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
		$result = curl_exec($ch);
		$status = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
		$error = curl_error($ch);
		
		if($result != '' && strstr($result,'VERIFIED') && $status==200){
			//thuc hien update hoa don
			fwrite($fh, 		' => VERIFIED');			
			$order_id 		= $_POST['order_id'];			
			$transaction_id 	= $_POST['transaction_id'];			
			$transaction_status = $_POST['transaction_status'];			
			$total_amount		= $_POST['total_amount'];			
			$net_amount		= $_POST['net_amount'];			
			$fee_amount		= $_POST['fee_amount'];			
			$customer_name		= $_POST['customer_name'];			
			$customer_address 	= $_POST['customer_address'];	
			$customerData		= "Net_amount:".$net_amount."-"."Fee_amount:".$fee_amount."-"."Customer_name:".$customer_name."-"."Customer_address:".$customer_address;
			//kiem tra trang thai giao dich
		if ($transaction_status == 4||$transaction_status == 13){
                        // Trang thai giao dich =4 la thanh toan truc tiep = 13 la thanh toan an toan
			// Check status ở đây với trường hợp tạm giữ (1 hay nhiều ngày ?) hay thanh toán liền
//                        if($transaction_status==4){
//                            //code here
//                        }elseif($transaction_status==13){
//                            //code here
//                        }
//                      // bao kim thanh toan truc tiep nen ko can check.  
			// mai code nha.
			//http://localhost/gamebank/muathe.vn/buycard/wallet_baokim_callback?created_on=1373538560&customer_address=&customer_email=thegioijoom%40gmail.com&customer_location=&customer_name=Joomlavui&customer_phone=84944000000&fee_amount=0&merchant_address=HCM&merchant_email=vnv1004%40gmail.com&merchant_id=9619&merchant_location=&merchant_name=Nguy%E1%BB%85n+V%C4%83n+Vui&merchant_phone=84944637657&net_amount=10000&order_id=gb_p_baokim_17_1_1373537817&payment_type=2&total_amount=10000.00&transaction_id=AD31BE285E756E1&transaction_status=13&checksum=4F77075D2CB8B31462E1B5B584F44691B08B3DB1
			//xac nhan la da thanh toan thanh cong don hang
			// Thao tac voi co so du lieu
			// E3.START SAVE LOG SUCCESS
				$aParamCardLog=array(
                                        'transID'               => $order_id,// key để biết được record sẽ updated
                                        'partnerTransID' 	=> $transaction_id,// partner from đối tác
                                        'transIdRes' 		=> $transaction_id,// key để biết được record sẽ updated
                                        //
                                        'amount'		=> $total_amount, // nếu thành công mới save số tiền vào									
                                        //
                                        'cardData'		=> $customerData, 
                                        // mess
                                        'errorCode'		=> $transaction_status,
                                        'errorMessage'		=> $errorMessage,
                                        'epayStatus'		=> 1,
                                        //
                                        'updated' 		=> date("Y-m-d H:i:s"),
                                        'statusDesc' 		=> "Thành công",
                                        'status' 		=> "1"
                                );
				// update customer ID for user table
				$aUpdate	= array("transID","partnerTransID","transIdRes","cardData","amount","errorCode","errorMessage","epayStatus","updated","statusDesc","status");		
				$log3 		= $this->db_billing_model->insert_onduplicate_logbilling_update($aParamCardLog,$aUpdate); //ok
				//
				$code 		= 1;
				$msgs[] 	= "Giao dịch thành công.";                                
                                // check
                                $tmp_status = $this->db_user_model->getTransIDStatus($order_id);// =1ok;else:false
                                if(!$tmp_status){ // if success trans will don't get card code.
                                    if($_SESSION['cardReceived']=='-100'){
                                        // CHUYỂN QUA BƯỚC UPDATE TIEN VAO VI 
                                        $card_info      = $this->updateAmountToVi($customerID, $email, $amount);
                                        $_SESSION['card_info'] = $card_info;
                                    }
                                }
                                $_SESSION['cardReceived']= 100; // ko else				
			}			
			/**
			 * Neu khong thi bo qua
			 */
		}else{
                        // E3.START SAVE LOG FAILED
                        $aParamCardLog=array(
                                'transID'               => $order_id,// key để biết được record sẽ updated
                                'partnerTransID' 	=> $transaction_id,// partner from đối tác
                                'transIdRes' 		=> $transaction_id,// key để biết được record sẽ updated
                                //
                                //'amount'		=> $total_amount, // nếu thành công mới save số tiền vào									
                                //
                                'cardData'		=> $customerData, 
                                // mess
                                'errorCode'		=> $transaction_status,
                                'errorMessage'		=> $errorMessage,
                                'epayStatus'		=> 1,
                                //
                                'updated' 		=> date("Y-m-d H:i:s"),
                                'statusDesc' 		=> "Thất bại",
                                'status' 		=> "0"
                        );
                        // update customer ID for user table
                        $aUpdate	= array("transID","partnerTransID","transIdRes","cardData","errorCode","errorMessage","epayStatus","updated","statusDesc","status");		
                        $log3 			= $this->db_billing_model->insert_onduplicate_logbilling_update($aParamCardLog,$aUpdate); //ok
			//fwrite($fh, ' => INVALID');
			$code 		= -1;
			$msgs[] 	= "INVALID.";
		}		
		if ($error){
			//fwrite($fh, " | ERROR: $error");
			$code 		= -1;
			$msgs[] 	= " | ERROR: $error.";
		}		
		foreach ($msgs as $m){
			$msg.="$m<br/>";			
		}
		$msg	= json_encode(array("code"=>$code,"msg"=>$msg));
		/////////////////
		//echo "bk callback";exit;
		$user_info = $this->session->userdata('user_info');
		if($user_info)
                    $this->smarty->assign("user_info", $user_info);
                if(isset($_SESSION['card_info']))
                    $card_info  = $_SESSION['card_info'];                
		//		
		$this->smarty
                            ->assign("card_info" , $card_info)
                            ->assign("msg"		, json_decode($msg))
                            ->display('template/buycard/home_info');
	}
	//
	function wallet_baokim_cancel(){
            redirect("wallet");exit;
	}
	//
	function wallet_baokim_detail(){
            //redirect("wallet");exit;
            echo "bk detail";exit;
	}	
	/**********************************END BẢO KIM*********************************************/
        /**********************************START NGAN LUONG*********************************************/
        function wallet_nganluong($amount_vi=null){
            // include thư viện
            //include APPPATH . 'libraries/pay/nganluong/vi/baokim/BaoKimPayment.php'; // thư viện smartlink
            require_once APPPATH . 'libraries/pay/nganluong/vi/config_nl.php'; // file config
            //require_once APPPATH . 'libraries/pay/nganluong/vi/include/lib/nusoap.php';
            require_once APPPATH . 'libraries/pay/nganluong/vi/include/nganluong.microcheckout.class.php';                
            //define lai url callback
            $return_url         =   base_url()."wallet/wallet_nganluong_callback";         
            $cancel_url         =   base_url()."wallet/wallet_nganluong_cancel";            
            //
            $_SESSION['cardReceived'] = -100; // start session
            //	
            $msgs	= array();
            $msg	= "";
            $code 	= -1;		
            $time	= time();
            $card_info	= "";
            ///                       
            $name       = "Nạp vào ví Muathe.vn";
            $quanty     = 1;
            $price      = 2000;//;
            $amount     = 2000; //$amount_vi so tien can thanh toan
            $order_code = TRANSID_PAY_BY_NGANLUONG."vi"."_".date('dmY_His');//'Order-'.date('His-dmY');
            $items      = array();
            $items[]    = array(
                            'item_name'         => $name,
                            'item_quanty'	=> $quanty,
                            'item_amount'	=> $price
            );            
            //$receiver = '';
            $inputs = array(
                    'receiver'		=> RECEIVER,
                    'order_code'	=> $order_code,
                    'amount'		=> $amount,
                    'currency_code'	=> 'vnd',
                    'tax_amount'	=> '0',
                    'discount_amount'	=> '0',
                    'fee_shipping'	=> '0',
                    'request_confirm_shipping'	=> '0',
                    'no_shipping'	=> '1',
                    'return_url'	=> $return_url,
                    'cancel_url'	=> $cancel_url,
                    'language'		=> 'vn',
                    'items'		=> $items
            );
            //print_r($inputs);
            $link_checkout  = '';
            $obj            = new NL_MicroCheckout(MERCHANT_ID, MERCHANT_PASS, URL_WS);
            $result         = $obj->setExpressCheckoutPayment($inputs);
            if($result != false) {
                if ($result['result_code'] == '00') {
                    $link_checkout = $result['link_checkout'];
                } else {
                    //die('Mã lỗi '.$result['result_code'].' ('.$result['result_description'].') ');
                    $code 	= -1;
                    $msgs[]     = 'Mã lỗi '.$result['result_code'].' ('.$result['result_description'].') ';
                }
            }else{
                //die('Lỗi kết nối tới cổng thanh toán Ngân Lượng');
                $code       = -1;
                $msgs[]     = 'Lỗi kết nối tới cổng thanh toán Ngân Lượng';
            }
            // Get user info
            $user_info = $this->session->userdata('user_info');
            if(!$user_info){
                    $code 		= -1;
                    $msgs[]             = "Vui lòng đăng nhập.";
                    //
                    $uID 		= "";
                    $username		= "";
                    $customerID 	= "";
                    $email 		= "";
            }else{
                    $uID 		= $user_info[0]->uID;
                    $username		= $user_info[0]->username;
                    $customerID         = $user_info[0]->customerID;
                    $email 		= $user_info[0]->email;	
            }
            if(!count($msgs)) {
                // SAVE LOG KHỞI TẠO
                /////////////////////////////////////	
                $log_init			= "";// khởi tạo dữ liệu			
                $log_init['ip'] 		= get_real_ip();
                $log_init['created'] 		= $time;
                $log_init['date'] 		= date("Y-m-d H:i:s");
                $log_init['transID'] 		= $order_code; // chính là order ID            
                $log_init['cardprice']		= $amount_vi;
                $log_init['typeUse']		= TRANSID_TYPE_USE_VI;            
                // E1.SAVE LOG KHỞI TẠO GIAO DỊCH TRƯỚC KHI ĐĂNG NHẬP VÀO EPAY
                $aParamCardLog=array(                                
                                'uID' 		=> $uID,				
                                'username'	=> $username,
                                'email' 	=> $email,
                                'customerID' 	=> $customerID,
                                'transID' 	=> $log_init['transID'],
                                // payment info
                                'transactionOrderInfo'=> "Nạp vào ví Muathe.vn",
                                ///                            
                                'cardprice' 	=> $log_init['cardprice'],
                                'paySource' 	=> NGANLUONG,
                                'typeUse' 	=> $log_init['typeUse'],
                                "date"		=> $log_init['date'],
                                'created' 	=> $log_init['created'],
                                'statusDesc' 	=> "Khởi tạo",
                                'status' 	=> "-2",
                                'ip' 		=> $log_init['ip']
                        );		
                // 
                $log1 				= $this->db_billing_model->ano_logbilling_init($aParamCardLog); //ok
                //echo $link_checkout;exit;
                redirect($link_checkout);
            }else{                                
                //$code 		= -1;
                //$msgs[] 	= "Hệ thống đang bận hoặc bảo trì, vui lòng quay lại sau.";
                foreach ($msgs as $m){
                        $msg.="$m<br/>";			
                }
                $msg	= json_encode(array("code"=>$code,"msg"=>$msg));
                // end get session from epay
                $user_info = $this->session->userdata('user_info');
                if($user_info)
                    $this->smarty->assign("user_info", $user_info);
                //
                $this->smarty
                            ->assign("msg", json_decode($msg))
                            ->display('template/wallet/home');
            }     
	}
	//
	function wallet_nganluong_callback(){            
            // include thu vien
            require_once APPPATH . 'libraries/pay/nganluong/vi/config_nl.php'; // file config
            //require_once APPPATH . 'libraries/pay/nganluong/vi/include/lib/nusoap.php';
            require_once APPPATH . 'libraries/pay/nganluong/vi/include/nganluong.microcheckout.class.php';
            //	
            $msgs	= array();
            $msg	= "";
            $code 	= -1;		
            $time	= time();
            $card_info	= "";
            //
            // Get user info
            $user_info = $this->session->userdata('user_info');
            if(!$user_info){
                    $code 		= -1;
                    $msgs[]             = "Vui lòng đăng nhập.";
                    //
                    $uID 		= "";
                    $username		= "";
                    $customerID 	= "";
                    $email 		= "";
            }else{
                    $uID 		= $user_info[0]->uID;
                    $username		= $user_info[0]->username;
                    $customerID         = $user_info[0]->customerID;
                    $email 		= $user_info[0]->email;	
            }
            //khai bao
            $obj = new NL_MicroCheckout(MERCHANT_ID, MERCHANT_PASS, URL_WS);

            if ($obj->checkReturnUrlAuto()) {
                $inputs = array(
                            'token'		=> $obj->getTokenCode(),//$token_code,
                );
                $result     = $obj->getExpressCheckout($inputs);
                if ($result != false) {
                    if ($result['result_code'] != '00') {
                        //die('Mã lỗi '.$result['result_code'].' ('.$result['result_description'].') ');
                        $code 	= -1;
                        $msgs[] = 'Mã lỗi '.$result['result_code'].' ('.$result['result_description'].') ';
                    }
                } else {
                    //die('Lỗi kết nối tới cổng thanh toán Ngân Lượng');
                    $code 	= -1;
                    $msgs[] 	= 'Lỗi kết nối tới cổng thanh toán Ngân Lượng';
                }
            } else {
                //die('Tham số truyền không đúng');
                $code           = -1;
                $msgs[] 	= 'Tham số truyền không đúng';
            }
            ///
            if(!count($msgs)) {
            //print_r($result);exit;
                // Mai check tiep cho nay // sao ma duy nhat thoi.
                if (isset($result) && !empty($result)) {
                    if ($result['result_code'] == '00') { // giao dich thanh cong
                        // GET VALUE                    
                        $order_code      = $this->null2unknown(@$_GET["order_code"]);// phuong thuc get
                        $transaction_id  = $this->null2unknown($result["transaction_id"]);
                        $errorCode       = $this->null2unknown($result['transaction_status']);                    
                        $methodPayment   = $this->null2unknown($result['method_payment_name']);
                        $amount          = $this->null2unknown($result['amount']);
                        $orderInfo       = $this->null2unknown(($result['transaction_type'] == 1 ? 'Thanh toán ngay' : 'Thanh toán tạm giữ'));
                        // info about user pay
                        $receiverName     = $this->null2unknown($result['payer_name']);
                        $receiverEmail    = $this->null2unknown($result['payer_email']);
                        $receiverPhone    = $this->null2unknown($result['payer_mobile']);
                        $cardAmount       = $this->null2unknown($result['card_amount']);
                        $customerData     = $receiverName."-".$receiverEmail."-".$receiverPhone."-".$cardAmount;
                        // code here
                        // E3.START SAVE LOG SUCCESS
                        $aParamCardLog=array(
                            'transID'               => $order_code,// key để biết được record sẽ updated
                            'partnerTransID' 	=> $transaction_id,// partner from đối tác
                            'transIdRes'            => $transaction_id,// key để biết được record sẽ updated
                            //
                            'amount'		=> $amount, // nếu thành công mới save số tiền vào									
                            //
                            'cardData'		=> $customerData, 
                            'phoneReceiver'		=> $receiverPhone, 
                            // mess
                            'errorCode'		=> $errorCode,
                            'errorMessage'          => $orderInfo,
                            'epayStatus'            => 1,
                            //
                            'updated' 		=> date("Y-m-d H:i:s"),
                            'statusDesc'            => "Thành công",
                            'status' 		=> "1"
                        );
                        // update customer ID for user table
                        $aUpdate            = array("transID","partnerTransID","transIdRes","cardData","amount","errorCode","errorMessage","updated","statusDesc","status");		
                        $log3 		= $this->db_billing_model->insert_onduplicate_logbilling_update($aParamCardLog,$aUpdate); //ok
                        //
                        $code 		= 1;
                        $msgs[]             = "Giao dịch thành công.";                        
                        // check
                        $tmp_status = $this->db_user_model->getTransIDStatus($order_id);// =1ok;else:false
                        if(!$tmp_status){ // if success trans will don't get card code.
                            if($_SESSION['cardReceived']=='-100'){
                                // CHUYỂN QUA BƯỚC UPDATE TIEN VAO VI 
                                $card_info      = $this->updateAmountToVi($customerID, $email, $amount);
                                $_SESSION['card_info'] = $card_info;
                            }
                        }
                        $_SESSION['cardReceived']= 100; // ko else // set session 1 lan duy nhat
                        //print_r($result);exit;
                    }else{
                        //echo $result['result_description'];
                        // E3.START SAVE LOG FAILED
                        $aParamCardLog=array(
                            'transID' 		=> $result["transaction_id"],// key để biết được record sẽ updated
                            'partnerTransID'        => $result["transaction_id"],// key để biết được record sẽ updated
                            'transIdRes'            => $result["transaction_id"],// key để biết được record sẽ updated                                                                          
                            // mess
                            'errorCode'		=> $result['result_code'],
                            'errorMessage'          => $result['result_description'],
                            //
                            'updated' 		=> date("Y-m-d H:i:s"),
                            'statusDesc'            => "Thất bại",
                            'status' 		=> "0"
                        );
                        //print_r($aParamCardLog);exit;
                        // update customer ID for user table
                        $aUpdate        = array("transID","partnerTransID","transIdRes","errorCode","errorMessage","updated","statusDesc","status");		
                        $log3           = $this->db_billing_model->insert_onduplicate_logbilling_update($aParamCardLog,$aUpdate); //ok
                        $code           = -1;
                        $msgs[]         = 'Giao dịch thất bại. Error: '.$result['result_description'];
                        //print_r($result);exit;
                    }
                }
            }
            foreach ($msgs as $m){
                    $msg.="$m<br/>";			
            }
            $msg	= json_encode(array("code"=>$code,"msg"=>$msg));
            // end get session from epay
            $user_info = $this->session->userdata('user_info');
            if($user_info)
                $this->smarty->assign("user_info", $user_info);
            //
            $this->smarty                    
                    ->assign("msg"		, json_decode($msg))
                    ->display('template/wallet/home');
        }
        function wallet_nganluong_cancel(){
            redirect("wallet");exit;
	}
	//
	function wallet_nganluong_detail(){
            //redirect("wallet");exit;
            echo "bk detail";exit;
	}
        /**********************************END NGAN LUONG*********************************************/
	/////////////////////////////END BUY CARD BY EPAY ///////////////////////////////	
        function captcha(){
            $this->captcha->generate();	
        }	   
}

/* End of file admin/cpanel.php */
/* Location: ./system/application/controllers/admin/cpanel.php */